Ruby 日記 48日目: 継承順序
#Ruby_日記 #2021-12-02
https://rex.libertyfish.co.jp/exam_histories/42141/user_answers/59dc0928-9b46-4a51-9d42-92d8e288fb27
次のプログラムを実行するとどうなりますか
code:main.rb
module M1
def method_1
__method__
end
end
class C
include M1
end
p C.new.method_1
module M2
def method_2
__method__
end
end
module M1
include M2
end
p C.new.method_2
選択肢:
例外が発生する
code:sh
"method_1"
code:sh
"method_2"
code:sh
"method_1"
"method_2"
解説:
処理の順序は
1. クラスCにモジュールM1をインクルードする
2. p C.new.method_1
3. モジュールM1にモジュールM2をインクルードする
4. p C.new.method_2
となっている
1. の段階ではモジュールM2がインクルードされていないので、クラスCには method_2 が存在しない。
なので 4. で例外が発生する。
code:sh
# ruby gold/ex48/main.rb
:method_1
gold/ex48/main.rb:23:in <main>': undefined method method_2' for #<C:0x00000000a90b28> (NoMethodError)
/icons/hr.icon
ん? __method__ は String じゃなくて Symbol を返すんだね。
module function Kernel.#__method__ (Ruby 2.1.0)